home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / More Source / C⁄C++ / Arashi 1.1 / Game Source / (Level shape Editor) / src / FitSped.c next >
Encoding:
C/C++ Source or Header  |  1992-10-28  |  3.0 KB  |  201 lines  |  [TEXT/KAHL]

  1. /*/
  2.      Project Arashi: FitSped.c
  3.      Major release: Version 1.1, 7/22/92
  4.  
  5.      Last modification: Wednesday, October 28, 1992, 23:38
  6.      Created: Tuesday, February 7, 1989, 22:36
  7.  
  8.      Copyright © 1989-1992, Juri Munkki
  9. /*/
  10.  
  11. #include <Math.h>
  12.  
  13. #define    PI 3.1415926535
  14.  
  15. #define MAXSEGS    48
  16. #define    ANGLES    120
  17.  
  18. typedef struct
  19. {
  20.     int        numsegs;
  21.     char    wraps;
  22.     char    seglen;
  23.     char    xoff;
  24.     char    yoff;
  25.     int        filler;
  26.     int        ang[MAXSEGS];
  27. }    shape;
  28.  
  29. extern    shape        space;
  30.  
  31. void    CreateFit()
  32. {
  33.     double    x,y,xmin,xmax,ymin,ymax,a;
  34.     double    sx,sy;
  35.     int        i;
  36.     
  37.     xmin=xmax=ymin=xmax=x=y=0.0;
  38.     a=0.0;
  39.     
  40.     for(i=0;i<space.numsegs;i++)
  41.     {    a+=space.ang[i];
  42.         x+= cos(a/ANGLES*PI*2);
  43.         y+=-sin(a/ANGLES*PI*2);
  44.         if(x<xmin)    xmin=x;
  45.         if(x>xmax)    xmax=x;
  46.         if(y<ymin)    ymin=y;
  47.         if(y>ymax)    ymax=y;
  48.     }
  49.  
  50.     xmin-=1.0;
  51.     ymin-=1.0;
  52.     xmax+=1.0;
  53.     ymax+=1.0;
  54.     x=-(xmin+xmax)/2;
  55.     y=-(ymin+ymax)/2;
  56.     
  57.     sx=640/(xmax-xmin);
  58.     sy=480/(ymax-ymin);
  59.     if(sy<sx)    sx=sy;
  60.     
  61.     x*=sx;
  62.     y*=sx;
  63.     a=0.0;
  64.     MoveTo((int)(x+320.5),(int)(y+220.5));
  65.     SmallCross();
  66.     for(i=0;i<space.numsegs;i++)
  67.     {    a+=space.ang[i];
  68.         x+= cos(a/ANGLES*PI*2)*sx;
  69.         y-= sin(a/ANGLES*PI*2)*sx;
  70.         LineTo((int)(x+320.5),(int)(y+220.5));
  71.         SmallCross();
  72.     }
  73. }
  74. void    DrawPlayer(cx,cy,dx,dy)
  75. int        cx,cy,dx,dy;
  76. {
  77.     int        x1,y1,x2,y2;
  78.     Point    foo;
  79.     int        slant;
  80.     
  81.     GetMouse(&foo);
  82.     slant = foo.h>>2;
  83.     if(slant<1)slant=1;
  84.     if(slant>7)slant=7;
  85.     x1=cx+dx;
  86.     y1=cy+dy;
  87.     
  88.     MoveTo(cx,cy);
  89.     x2=(dx*slant)/8+dy/4;
  90.     y2=(dy*slant)/8-dx/4;
  91.     LineTo(cx+x2,cy+y2);
  92.     LineTo(x1,y1);
  93.     x2=-(slant*dx)/16-dy/4;
  94.     y2=-(slant*dy)/16+dx/4;
  95.     LineTo(x1+x2,y1+y2);
  96.     x2=-dx/8;
  97.     y2=-dy/8;
  98.     LineTo(x1+x2,y1+y2);
  99.     x2=(dx*slant)/8+dy/8;
  100.     y2=(dy*slant)/8-dx/8;
  101.     LineTo(cx+x2,cy+y2);
  102.     x2=dx/8;
  103.     y2=dy/8;
  104.     LineTo(cx+x2,cy+y2);
  105.     x2=((8-slant)*dx)/16-dy/4;
  106.     y2=((8-slant)*dy)/16+dx/4;
  107.     LineTo(cx+x2,cy+y2);
  108.     LineTo(cx,cy);
  109. }
  110. void    DrawFlipper(cx,cy,dx,dy)
  111. int        cx,cy,dx,dy;
  112. {
  113.     int    x1,y1,x2,y2;
  114.     int    dx4,dx8,dy4,dy8;
  115.     
  116.     dx4=dx/4;
  117.     dy4=dy/4;
  118.     dx8=dx/8;
  119.     dy8=dy/8;
  120.     
  121.     x1=cx+dx;
  122.     y1=cy+dy;
  123.     MoveTo(cx,cy);
  124.     x2=dx8-dy4;    
  125.     y2=dy8+dx4;
  126.     LineTo(x1-x2,y1-y2);
  127.     x2=dx4-dy8;    
  128.     y2=dy4+dx8;
  129.     LineTo(x1-x2,y1-y2);
  130.     LineTo(x1,y1);
  131.     
  132.     x2=dx8+dy4;    
  133.     y2=dy8-dx4;
  134.     LineTo(cx+x2,cy+y2);
  135.     x2=dx4+dy8;    
  136.     y2=dy4-dx8;
  137.     LineTo(cx+x2,cy+y2);
  138.     LineTo(cx,cy);
  139. }
  140. void    DrawPulsar(cx,cy,dx,dy)
  141. int        cx,cy,dx,dy;
  142. {
  143.     int    x1,y1,x2,y2;
  144.     int    dx4,dx8,dy4,dy8;
  145.     int    scl,dxf,dyf;
  146.     Point    foo;
  147.     
  148.     GetMouse(&foo);
  149.     scl=(foo.h>>2);
  150.     scl-=20;
  151.     if(scl<-8) scl=-8;
  152.     if(scl>8)  scl=8;
  153.     
  154.     dx4=dx/4;
  155.     dy4=dy/4;
  156.     dxf=(dx*scl)/32;
  157.     dyf=(dy*scl)/32;
  158.     dx8=dx/8;
  159.     dy8=dy/8;
  160.  
  161.     x1=cx+dx;
  162.     y1=cy+dy;
  163.     MoveTo(cx,cy);
  164.     x2=dx8-dyf;
  165.     y2=dy8+dxf;
  166.     LineTo(cx+x2,cy+y2);
  167.     
  168.     x2=dx4+dyf;
  169.     y2=dy4-dxf;
  170.     LineTo(cx+x2,cy+y2);
  171.     x2=dx/2-dyf;
  172.     y2=dy/2+dxf;
  173.     LineTo(cx+x2,cy+y2);
  174.  
  175.     x2=-dx4+dyf;
  176.     y2=-dy4-dxf;
  177.     LineTo(x1+x2,y1+y2);
  178.     x2=-dx8-dyf;
  179.     y2=-dy8+dxf;
  180.     LineTo(x1+x2,y1+y2);
  181.     LineTo(x1,y1);
  182. }
  183. void    TestFlip()
  184. {
  185.     double    a;
  186.     Rect    argh;
  187.     long    rest;
  188.     Point    foo;
  189.     
  190.     SetRect(&argh,100,100,300,300);
  191.     
  192.     a=0.0;
  193.     while(!Button())
  194.     {    GetMouse(&foo);
  195.         EraseRect(&argh);
  196.         DrawPlayer(200,200,(int)(100*cos(a/ANGLES*PI*2)),
  197.                             (int)(100*-sin(a/ANGLES*PI*2)));
  198.         Delay(3,&rest);
  199.         a=foo.v;
  200.     }
  201. }